【函数】计算cosine

import numpy as np


def single_cosine(vec1, vec2):
    """
    计算两个向量的cosine
    param vec1: vector: m * 1
    param vec2: vector: m * 1
    return: float value
    """
    return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))


def cosine(mat1, mat2):
    """
    计算两矩阵对应行元素的cosine值
    param mat1: matrix: n * m
    param mat2: matrix: n * m
    return: vector: n * 1
    """
    norm_func = lambda l: np.linalg.norm(l)
    mat_norm1 = np.apply_along_axis(norm_func, 1, mat1)
    mat_norm2 = np.apply_along_axis(norm_func, 1, mat2)
    mat_mlt = np.sum(np.array(mat1) * np.array(mat2), axis=1)
    result = mat_mlt / (mat_norm1 * mat_norm2)
    return result


def matrix_cosine(vec, mat):
    """
    计算vector和矩阵内所有行元素交叉的cosine值
    param vec: vector: 1 * m
    param mat: matrix: n * m
    return: vector: n * 1
    """
    norm_func = lambda l: np.linalg.norm(l)
    mult_func = lambda l: l * vec
    mat_norm = np.apply_along_axis(norm_func, 1, mat)
    vec_norm = np.linalg.norm(vec)
    mat_mlt = np.sum(np.apply_along_axis(mult_func, 1, mat), axis=1)
    result = mat_mlt / (mat_norm * vec_norm)
    return result

results matching ""

    No results matching ""